home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / etc / network / if-up.d / mountnfs < prev    next >
Text File  |  2008-10-14  |  4KB  |  165 lines

  1. #! /bin/sh
  2. # Description:       Now that TCP/IP is configured, mount the NFS file
  3. #                    systems in /etc/fstab if needed. If possible,
  4. #                    start the portmapper before mounting (this is needed for
  5. #                    Linux 2.1.x and up).
  6. #
  7. #                    Also mounts SMB filesystems now, so the name of
  8. #                    this script is getting increasingly inaccurate.
  9.  
  10. PATH=/sbin:/bin
  11. . /lib/init/vars.sh
  12.  
  13. . /lib/lsb/init-functions
  14. . /lib/init/mount-functions.sh
  15.  
  16. do_start() {
  17.     [ -f /etc/fstab ] || return
  18.     #
  19.     # Read through fstab line by line. If it is NFS, set the flag
  20.     # for mounting NFS file systems. If any NFS partition is found and it
  21.     # not mounted with the nolock option, we start the portmapper.
  22.     # 
  23.     # If any sec={krb5,krb5i,krb5p} option is given, or any of the file
  24.     # systems are nfs4, we'll need to start rpc.gssd and/or rpc.idmapd too;
  25.     # we'll leave that to nfs-common.
  26.     #
  27.  
  28.     exec 9<&0 </etc/fstab
  29.  
  30.     start_nfs=no
  31.     NETFS=""
  32.     NETDEV=""
  33.     while read DEV MTPT FSTYPE OPTS REST
  34.     do
  35.         case "$DEV" in
  36.           ""|\#*)
  37.             continue
  38.             ;;
  39.         esac
  40.         case "$OPTS" in
  41.           noauto|*,noauto|noauto,*|*,noauto,*)
  42.             continue
  43.             ;;
  44.           _netdev|*,_netdev|_netdev,*|*,_netdev,*)
  45.             NETDEV=yes
  46.             ;;
  47.         esac
  48.         case "$FSTYPE" in
  49.           nfs)
  50.               # NFS filsystems normally require statd and portmap. However,
  51.             # if nolock is set, portmap and statd are not required for this
  52.             # file system.
  53.             case "$OPTS" in
  54.               nolock|*,nolock|nolock,*|*,nolock,*)
  55.                   # no action
  56.                 ;;
  57.               *)
  58.                 start_nfs=yes
  59.                 ;;
  60.             esac
  61.  
  62.             # However, Kerberos requires gssd, so start nfs-common anyway.
  63.             case "$OPTS" in
  64.               sec=krb5|*,sec=krb5|sec=krb5,*|*,sec=krb5,*|sec=krb5i|*,sec=krb5i|sec=krb5i,*|*,sec=krb5i,*|sec=krb5p|*,sec=krb5p|sec=krb5p,*|*,sec=krb5p,*)
  65.  
  66.                   start_nfs=yes
  67.                 ;;
  68.             esac
  69.             ;;
  70.           nfs4)
  71.             # NFSv4 requires idmapd, so start nfs-common no matter what the options are.
  72.             start_nfs=yes
  73.             ;;
  74.           smbfs|cifs|coda|ncp|ncpfs|ocfs2|gfs)
  75.             ;;
  76.           *)
  77.             FSTYPE=
  78.             ;;
  79.         esac
  80.         if [ "$FSTYPE" ]
  81.         then
  82.             case "$NETFS" in
  83.               $FSTYPE|*,$FSTYPE|$FSTYPE,*|*,$FSTYPE,*)
  84.                 ;;
  85.               *)
  86.                 NETFS="$NETFS${NETFS:+,}$FSTYPE"
  87.                 ;;
  88.             esac
  89.         fi
  90.     done
  91.  
  92.     exec 0<&9 9<&-
  93.  
  94.     #
  95.     # Initialize nfs-common (which starts rpc.statd, rpc.gssd
  96.     # and/or rpc.idmapd, and loads the right kernel modules if
  97.     # applicable) if we use Kerberos and/or NFSv4 mounts.
  98.     #
  99.     if [ "$start_nfs" = yes ] && [ -x /etc/init.d/portmap ] && [ -x /etc/init.d/nfs-common ]
  100.     then
  101.         /etc/init.d/portmap start
  102.         /etc/init.d/nfs-common start
  103.     fi
  104.  
  105.     pre_mountall
  106.     if [ "$NETFS" ]
  107.     then
  108.         mount -a -t$NETFS
  109.     fi
  110.     if [ "$NETDEV" ]; then
  111.         mount -a -O _netdev
  112.     fi
  113.     post_mountall
  114. }
  115.  
  116. exit_unless_last_interface() {
  117.     grep "^[:space:]*auto" /etc/network/interfaces  | \
  118.     sed -e 's/[ \t]*auto[ \t]*//;s/[ \t]*$//;s/[ \t]/\n/g' | \
  119.     while read i; do
  120.     if [ `grep -c $i /var/run/network/ifstate` -eq "0" ]; then
  121.         msg="if-up.d/mountnfs[$IFACE]: waiting for interface $i before doing NFS mounts"
  122.         log_warning_msg "$msg"
  123.         # Can not pass this as a variable because of the while subshell
  124.         mkdir /var/run/network/mountnfs_earlyexit 2> /dev/null
  125.     fi
  126.     done
  127.     if [ -d /var/run/network/mountnfs_earlyexit ]; then
  128.     rmdir /var/run/network/mountnfs_earlyexit 2>/dev/null
  129.     exit 0
  130.     fi
  131. }
  132.  
  133. # Using 'no !=' instead of 'yes =' to make sure async nfs mounting is
  134. # the default even without a value in /etc/default/rcS
  135. if [ no != "$ASYNCMOUNTNFS" ]; then
  136.     # Not for loopback!
  137.     [ "$IFACE" != "lo" ] || exit 0
  138.  
  139.     # Lock around this otherwise insanity may occur
  140.     mkdir /var/run/network          2>/dev/null || true
  141.  
  142.     # Wait until all auto interfaces are up before attemting to mount
  143.     # network file systems.
  144.     exit_unless_last_interface
  145.  
  146.     if mkdir /var/run/network/mountnfs 2>/dev/null ; then
  147.     :
  148.     else
  149.     msg="if-up.d/mountnfs[$IFACE]: lock /var/run/network/mountnfs exist, not mounting"
  150.     log_failure_msg "$msg"
  151.     # Log if /usr/ is mounted
  152.     [ -x /usr/bin/logger ] && /usr/bin/logger -t "if-up.d/mountnfs[$IFACE]" "$msg"
  153.     exit 0
  154.     fi
  155.  
  156.     on_exit() {
  157.         # Clean up lock when script exits, even if it is interrupted
  158.     rmdir /var/run/network/mountnfs 2>/dev/null || exit 0
  159.     }
  160.     trap on_exit EXIT # Enable emergency handler
  161.     do_start
  162. elif [ yes = "$FROMINITD" ] ; then
  163.     do_start
  164. fi
  165.